<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>IIFE提升性能的例子</title>
    <script>
        /**
         * 注册事件
         * @param {HTMLElement} ele 元素
         * @param {string} ele 元素
         * @param {Function} handler 事件处理函数
         */
        function addEvent(ele,eventName,handler){
            if(ele.addEventListener){
                ele.addEventListener(eventName,handler);
            }else if(ele.attachEvent){
                ele.attachEvent('on'+eventName,handler);
            }else{
                ele['on'+eventName]=handler;
            }
        }
         /**
         * 优化后注册事件(每次执行的时候不需要进行判断)
         * @param {HTMLElement} ele 元素
         * @param {string} ele 元素
         * @param {Function} handler 事件处理函数
         */
        var addEvent=(function(){
            console.log("立即执行函数--立马被执行了")
            if(document.addEventListener){
                return function(ele,eventName,handler){
                    console.log("addEventListener--------")
                    ele.addEventListener(eventName,handler);
                } 
            }else if(document.attachEvent){
                return function(ele,eventName,handler){
                    console.log("attachEvent--------")
                    ele.attachEvent('on'+eventName,handler);
                } 
            }else{
                return function(ele,eventName,handler){
                    console.log("other--------")
                    ele['on'+eventName]=handler;
                } 
            }
        })();
        // 每次执行的时候不需要进行判断
        const request = (()=>{
            console.log("request--------")
            if(typeof window !== 'undefined'){
                return (options)=>{
                    // 浏览器端的ajax
                    console.log("浏览器端的ajax--------")
                }
            }else{
                return (options)=>{
                    // node的http
                    console.log("node的http--------")
                }
            }
        })();
        request('1111');

        function removeSpace(str){
            console.log("removeSpace1--------")
            return str.replace(/\s/g,'');
        }
        // 每次执行的时候不需要进行判断，并且保持内存的稳定
        const removeSpace2 = (()=>{
            console.log("removeSpace2--------")
            const reg = /\s/g,replacement='';
            return (str)=>str.replace(reg,replacement);
        })();

        const createRemoveSpace = ()=>{
            console.log("createRemoveSpace--------")
            const reg = /\s/g,replacement='';
            return (str)=>str.replace(reg,replacement);
        };
        let createSpace = createRemoveSpace();
        createSpace('xxxx wwwww 2222');
        createSpace('xxxx wwwww 2222');
        createSpace('xxxx wwwww 2222');
        createSpace = null;
    </script>
</head>
<body>
    
</body>
</html>